perm filename PACKMS.F4[NEW,LCS]3 blob sn#561083 filedate 1981-02-01 generic text, type T, neo UTF8
00100	C**** PACKMS.F4 -- TO PACK TOGETHER MANY MS PROGRAM FILES *****
00200	C LOAD WITH [NEW,LCS] MSSIO.FAI,STUF.FAI
00300		DIMENSION NAMES(635),JEXT(200),JREC(235),
00400		1 FIRST(128),V(2000),SECOND(4000),INP(72)
00500	C JREC(235) HAS 34 WDS FREE FOR MISC. INFO
00600		EQUIVALENCE(JWDS,FIRST(19)),(KREC,JREC(202)),(JEXT,NAMES(201))
00700		1 ,(JREC,NAMES(401)),(JFLAG,FIRST(128))
00800		IREC=1
00900		JREC(1)=6
01000	15	FORMAT(' P(ACK), U(NPACK), D(IRECTORY)?  '$)
01100	18	TYPE 15
01200		ACCEPT 1,JWDS,K,L
01300		IPU=0
01400		MORE=0
01500		IF(JWDS.EQ.'P')GO TO 2
01600		INF=-1
01700		IPU=-1
01800		IF(JWDS.EQ.'D')	IPU=-IPU
01900	C PACK=0,  UNPACK=-1, DIRECTORY=1
02000	16	FORMAT(' TYPE PACK FILE NAME AND EXT.(DEFAULT EXT=.PAK)  '$)
02100	17	TYPE 16
02200		ACCEPT 1,INP
02300		X=' '
02400		CALL NAMEXT(INP,IPAK,X)
02500		IF(INP(1).EQ.' ')IPAK=JPAK
02600		JPAK=IPAK
02700		IF(X.EQ.' ')X='PAK'
02800		IF(LOOKX(IPAK,X).EQ.0)GO TO 17
02900		IF(IPU.GT.0)GO TO 113
03000	1	FORMAT(72A1)
03100	2	IF(IPU.LT.0)GO TO 41
03200		TYPE 3
03300		GO TO 42
03400	41	TYPE 40
03500	3	FORMAT(' TYPE FIRST NAME AND EXT.(DEFAULT EXT=.MS)  '$)
03600	40	FORMAT(' TYPE FIRST NAME AND EXT.(DEFAULT EXT=.MS) OR "ALL"  '$)
03700	4	FORMAT(' TYPE LAST NAME OR "ALL" (NO EXT, <CR>=1 FILE ONLY)  '$)
03800	42	ACCEPT 1,INP
03900		KEXT=' '
04000		CALL NAMEXT(INP,NAME,KEXT)
04100		IF(KEXT.EQ.' ')KEXT='MS'
04200		IF(IPU.LT.0.AND.NAME.EQ.'ALL')GO TO 122
04300		IF(IPU.LT.0)GO TO 19
04400		IF(LOOKX(NAME,KEXT).EQ.0)GO TO 2 
04500	19	TYPE 4
04600		ACCEPT 1,INP
04700		NAME2=' '
04800		X2=' '
04900		CALL NAMEXT(INP,NAME2,X2)
05000		IF(NAME2.EQ.' ')NAME2=NAME
05100		IF(X2.EQ.' ')X2=KEXT
05200		IF(X2.NE.KEXT)GO TO 18
05300		IF(IPU.LT.0)GO TO 121
05400		IF(NAME2.EQ.'ALL')NAME2='99999'
05500	12	IF(MORE.LT.0)GO TO 21
05600		TYPE 16
05700		ACCEPT 1,INP
05800		X=' '
05900		CALL NAMEXT(INP,IPAK,X)
06000		IF(X.EQ.' ')X='PAK'
06100	13	IF(LOOKX(IPAK,X).EQ.0)GO TO 10
06200		TYPE 11
06300	11	FORMAT(' WRITE OVER THAT NAME?  '$)
06400		ACCEPT 1,INP
06500		IF(INP(1).NE.'Y')GO TO 12
06600	10	CALL PUTEXT(IPAK,X)
06700		CALL EXTOUT(NAMES,635)
06800	C COME BACK AND FILL UP THE HEADER LATER.
06900	21	NM=NAME
07000		MORE=0
07100	20	NMX=NM
07200		NMZ=NM
07300	6	IF(LOOKX(NM,KEXT).EQ.0)GO TO 1000
07400	C JUMP IF NOT FOUND
07500	7	CALL GETEXT(NM,KEXT)
07600		CALL EXTIN(FIRST,128)
07700		CALL EXTIN(SECOND,JWDS)
07750		CALL STUFIT(SECOND,JWDS)
07775	C  GO MAKE PACKED VERSION OF DATA
07787		JFLAG=-999
07800		CALL EXTOUT(FIRST,128)
07900		CALL EXTOUT(SECOND,JWDS)
08000		TYPE 9,NM,KEXT
08100		NAMES(IREC)=NM
08200		JEXT(IREC)=KEXT
08300		KREC=IREC
08400		IREC=IREC+1
08500		JREC(IREC)=JREC(IREC-1)+2+(JWDS-1)/128
08600	C SAVE FOR USETI
08700		IF(IREC.LT.201)NAMES(IREC)=0
08800	14	IF(NM.EQ.NAME2.OR.IREC.EQ.200)GO TO 2000
08900	C LIMIT OF 200 FILES AT THIS TIME.
09000		NM=NM+2
09100		GO TO 6
09200	1000	NM=NMX+256
09300	C UPDATE 4TH CHAR.  (E.G. AAAAA TO AAABA)
09400		NMX=NM
09500		IF(LOOKX(NM,KEXT).LT.0)GO TO 7
09600		NM=NMZ+32768
09700	C UPDATE 3RD CHAR. (E.G. AAAAA TO AABAA)
09800		NMX=NM
09900		NMZ=NM
10000		IF(LOOKX(NM,KEXT).LT.0)GO TO 7
10100	C NOW ALL DONE.  REBUILD HEADER.
10200	2001	FORMAT(' ADD MORE TO FILE?  '$)
10300	2000	TYPE 2001
10400		ACCEPT 1,K
10500		MORE=-1
10600		IF(K.EQ.'Y')GO TO 2
10700		CALL USTO(1)
10800		CALL EXTOUT(NAMES,635)
10900		CALL FINEXT
11000		TYPE 8,IPAK,X,KREC
11100		CALL EXIT
11200	8	FORMAT(' ***** ALL DONE WRITING ',A5,'.',A3/5XI3,' FILES')
11300	9	FORMAT(1XA5,'.',A3)
11400	122	IPU=4
11500	121	TYPE 111
11600	111	FORMAT(' CHANGE EXTENSION TO -- (<CR>=NO CHANGE)  '$)
11700	112	FORMAT(A3)
11800		ACCEPT 112,NEXT
11900		IF(NEXT.NE.' ')KEXT=NEXT
12000	113	CALL GETEXT(IPAK,X)
12100		CALL EXTIN(NAMES,635)
12200		IF(IPU.LE.0)GO TO 114
12300		GO TO(109,2,118,3000)IPU
12400	118	GO TO 18
12500	115	FORMAT(' TYPE NEW NAME AND EXT.  '$)
12600	119	MEXT=' '
12700		TYPE 115
12800		ACCEPT 1,INP
12900		CALL NAMEXT(INP,NAME2,MEXT)
13000		IF(MEXT.EQ.' ')MEXT=KEXT
13100		NMX=0
13200		DO 116 K=1,200
13300		NN=NAMES(K)
13400		MM=JEXT(K)
13500		IF(NAME.EQ.NN.AND.KEXT.EQ.MM)NMX=K
13600	116	IF(NAME2.EQ.NN.AND.MEXT.EQ.MM)GO TO 117
13700		IF(NMX.NE.0)GO TO 120
13800		TYPE 102
13900		CALL EXIT
14000	120	NAMES(NMX)=NAME2
14100		JEXT(NMX)=MEXT
14200		CALL EXIT
14300	CCCC GO WRITE NEW FORM OF .PAK FILE	GO TO ????
14400	117	TYPE 11
14500		ACCEPT 1,JWDS
14600		IF(JWDS.NE.'Y')GO TO 18
14700	114	NM=NAME
14800		NN=NM
14900	105	DO 101 K=1,200
15000	101	IF(NAMES(K).EQ.NAME)GO TO 108
15100		NAME=NM+256
15200		NM=NAME
15300		DO 107 K=1,200
15400	107	IF(NAMES(K).EQ.NAME)GO TO 108
15500		NAME=NN+32768
15600		NN=NAME
15700		NM=NN
15800		DO 177 K=1,200
15900	177	IF(NAMES(K).EQ.NAME)GO TO 108
16000	106	IF(INF.NE.0)TYPE 102
16100		GO TO 18
16200	102	FORMAT(' FILE NOT FOUND')
16300	108	CALL USTI(JREC(K))
16400		CALL EXTIN(FIRST,128)
16500		CALL EXTIN(SECOND,JWDS)
16550	C READ INTO SECOND ARRAY.  IF JFLAG=-999 THEN UNDO PACKED FORMAT
16600		TYPE 9,NAME,KEXT
16700		INF=0
16800	104	IF(LOOKX(NAME,KEXT).EQ.0)GO TO 103
16900	C IS FILE ALREADY ON DSK?
17000		TYPE 11
17100		ACCEPT 1,K
17200		IF(K.EQ.'Y')GO TO 103
17300		TYPE 3   
17400		ACCEPT 1,INP
17500		CALL NAMEXT(INP,NAME,KEXT)
17600		GO TO 104
17700	103	JF=JFLAG
17712		JFLAG=0
17718		IF(JF.EQ.-999)CALL UNSTUF(SECOND,V,JWDS)
17725		CALL PUTEXT(NAME,KEXT)
17800		CALL EXTOUT(FIRST,128)
17820		IF(JF.EQ.-999)CALL EXTOUT(V,JWDS)
17860		IF(JF.NE.-999)CALL EXTOUT(SECOND,JWDS)
17880	C USE SECOND ARRAY FOR OLD FORMAT
18000		CALL FINEXT
18100		IF(NAME.EQ.NAME2)CALL EXIT
18200		NAME=NAME+2
18300		GO TO 105
18400	3004	FORMAT(3XI3,' FILES'/)
18500	109	TYPE 3004,KREC
18600		 DO 110 K=1,200
18700		IF(NAMES(K).EQ.0)GO TO 18
18800	110	TYPE 9,NAMES(K),JEXT(K)
18900		GO TO 18
19000	3000	DO 3001 K=1,200
19100		NM=NAMES(K)
19200		IF(NM.EQ.0)CALL EXIT
19300		MM=JEXT(K)
19400		IF(NEXT.NE.' ')MM=NEXT
19500		CALL EXTIN(FIRST,128)
19600		CALL EXTIN(SECOND,JWDS)
19700		TYPE 9,NM,MM
19800	3003	IF(LOOKX(NM,MM).EQ.0)GO TO 3002
19900		TYPE 11
20000		ACCEPT 1,L
20100		IF(L.NE.'Y')GO TO 3001
20200	3002	JF=JFLAG
20225		JFLAG=0
20237		IF(JF.EQ.-999)CALL UNSTUF(SECOND,V,JWDS)
20243		CALL PUTEXT(NM,MM)
20300		CALL EXTOUT(FIRST,128)
20387		IF(JF.EQ.-999)CALL EXTOUT(V,JWDS)
20400		IF(JF.NE.-999)CALL EXTOUT(SECOND,JWDS)
20500		CALL FINEXT
20600	3001	CONTINUE
20700		END
20800	
20900		SUBROUTINE NAMEXT(I,NAME,IEXT)
21000	C FINDS NAME.EXT IN A1 STRING
21100		DIMENSION I(1)
21200	
21300		IF(I(1).NE.-1)GO TO 9
21400	C FIRST PASS UP 'G', 'GM', 'RS', ETC.  (=-1)
21500		DO 1 K=1,72
21600	1	IF(I(K).EQ.' ')GO TO 2
21700	C NOW PASS BLANKS
21800	2	J=72
21900		DO 3 J=K+1,72
22000	3	IF(I(J).NE.' ')GO TO 4
22100	C NOW FOUND START OF WORD (UNLESS ALL BLANKS)
22200	4	IF(J.NE.72)GO TO 5
22300		NAME=' '
22400		RETURN
22500	9	J=1
22600	5	DO 6 K=J,72
22700		IF(I(K).EQ.' ')GO TO 7
22800	C JUMP IF NAME ONLY
22900	6	IF(I(K).EQ.'.')GO TO 8
23000	7	CALL PACKX(NAME,I(J))
23100		RETURN
23200	8	CALL RLOOP(I(61),I(J),K-J)
23300		CALL PACKX(NAME,I(61))
23400		CALL PACKX(IEXT,I(K+1))
23500		END
23600	
23700		SUBROUTINE PACKX(NAM,KNM)
23800		DIMENSION KNM(5)
23900		DATA KK/128/,LL/"377777777777/,JJ/"2000000000/
24000		1 , MM/"774000000000/
24100		NAM=0
24200		DO 12 K=5,1,-1
24300		NAM=NAM .OR. (KNM(K) .AND. MM)
24400		IF (K.EQ.1)RETURN
24500	17	IF (NAM.GE.0)GO TO 13
24600		NAM = (( NAM .AND. LL)/KK) .OR. JJ
24700		GO TO 12
24800	13	NAM = NAM / KK
24900	12	CONTINUE
25000		RETURN
25100		END